#include "messageHandle.h"
#include "stdShared.h"
#include <json-c/json.h>
/* 构造函数 */
MessageHandle::MessageHandle(const StdTcpSocketPtr & clientInfo) : m_funtion(clientInfo)
{
    /* 注册业务 */
    m_handles[REGISTER] = [this](const string & msg) {m_funtion.handleRegisterInfo(msg); };
    m_handles[LOGIN] = [this](const string & msg) {m_funtion.handleLoginInfo(msg); };
    //在线音乐
    m_handles[ONLINEMUSIC] = [this](const string & msg) {m_funtion.handleOnlineMusicInfo(msg);};
    //在线歌单
    m_handles[ONLINESONGS] = [this](const string & msg) {m_funtion.handleOnlinesongsInfo(msg);};
    //下载歌曲
    m_handles[DOWNLOADMUSIC] = [this](const string &msg){m_funtion.handledownloadMusicInfo(msg);};
    m_handles[ADDFRIEND] = [this](const string &msg) {m_funtion.handleAddFriendInfo(msg);};
    /* */
}


/* 析构函数 */
MessageHandle::~MessageHandle()
{
    
}


/* 处理信息 */
void MessageHandle::handleMessage(const string & msg)
{
    int type = 0;
    json_object * jsonObj =  json_tokener_parse(msg.c_str());

    if(jsonObj != NULL)
    {
        //2.根据key得到value
        type = json_object_get_int( json_object_object_get(jsonObj,"type"));
    }

    auto iter = m_handles.find(type);
    if (iter != m_handles.end())
    {
        /* 执行回调函数 */
        iter->second(msg);
    }
    else 
    {
        /* 处理位置的消息类型 */
        cout << "unknown message type." << endl;
    }
}